package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Date;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

import org.junit.experimental.theories.internal.Assignments;

import negocio.Alumno;
import negocio.AlumnoControlador;
import negocio.Asistencia;
import negocio.AsistenciaControlador;
import negocio.Clase;
import negocio.ClaseControlador;
import negocio.Cursada;
import negocio.Tarea;
import negocio.TareaControlador;
import negocio.Usuario;

public class Asistencias extends JFrame{

	private JPanel contentPane;
	private JTable table;
	private DefaultTableModel tm;
	private ArrayList<Asistencia> asistencias;
	private ArrayList<Alumno> alumnos;
	private Clase clase;
	private Clases padre;
	private boolean queHago;//0 creo nuevas asistencias, 1 actualizo asistencias.
	
	/**
	 * Launch the application.
	 */
	/*public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Asistencias frame = new Asistencias();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Asistencias(Clases padre, Clase clase, Usuario usuario) 
	{
		setTitle("Asistencias");
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		addWindowListener(new WindowAdapter() 
		{
			public void windowClosing(WindowEvent e){
				padre.nullAsistencias();
			}
		});
		this.padre=padre;
		this.clase = clase;
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 406, 457);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
				
		JLabel lblCursada = new JLabel("C\u00F3digo Cursada:");
		lblCursada.setBounds(10, 36, 86, 14);
		contentPane.add(lblCursada);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 86, 370, 288);
		contentPane.add(scrollPane);
		
		table = new JTable(){
			
			
			public boolean[] columnEditables = new boolean[]
			{
				false, true
			};

			public boolean[] columnNoEditables = new boolean[]
			{
				false, false
			};
			@Override
			public boolean isCellEditable(int row, int colum)
			{
				if(clase.getCursada().getEstado().equalsIgnoreCase("Iniciada"))
				{
					return columnEditables[colum];
				}
				else
				{
					return columnNoEditables[colum];
				}
			}
		};
		
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scrollPane.setViewportView(table);
		tm = new DefaultTableModel();
		String[] columnas = {"Alumnos", "Asistencia"};
		tm.setColumnIdentifiers(columnas);
		table.setModel(tm);
		llenarTabla();
		
		JLabel lblNewLabel = new JLabel("Curso:");
		lblNewLabel.setBounds(10, 11, 38, 14);
		contentPane.add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel(clase.getCursada().getCurso().getNombre());
		lblNewLabel_1.setBounds(50, 11, 191, 14);
		contentPane.add(lblNewLabel_1);
		
		JLabel lblNewLabel_2 = new JLabel(clase.getCursada().getCodigo());
		lblNewLabel_2.setBounds(106, 36, 241, 14);
		contentPane.add(lblNewLabel_2);
		
		JLabel lblClase = new JLabel("Clase:");
		lblClase.setBounds(10, 61, 46, 14);
		contentPane.add(lblClase);
		
		JLabel labelFecha = new JLabel(clase.getFecha().toString());
		labelFecha.setBounds(50, 61, 70, 14);
		contentPane.add(labelFecha);
		
		JLabel lblNewLabel_4 = new JLabel("de ");
		lblNewLabel_4.setBounds(130, 61, 20, 14);
		contentPane.add(lblNewLabel_4);
		
		JLabel labelHoraInicio = new JLabel(clase.getHoraInicio().toString());
		labelHoraInicio.setBounds(147, 61, 46, 14);
		contentPane.add(labelHoraInicio);
		
		JLabel labelHoraFin = new JLabel("a");
		labelHoraFin.setBounds(195, 61, 46, 14);
		contentPane.add(labelHoraFin);
		
		JLabel lblNewLabel_7 = new JLabel(clase.getHoraFin().toString());
		lblNewLabel_7.setBounds(205, 61, 46, 14);
		contentPane.add(lblNewLabel_7);
		
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnCancelar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				padre.nullAsistencias();
				dispose();
			}
		});
		btnCancelar.setBounds(291, 385, 89, 23);
		contentPane.add(btnCancelar);
				
		JButton btnReportar = new JButton("Reportar");
		btnReportar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				table.getColumnModel().getColumn(1).getCellEditor().stopCellEditing();
				if (!queHago) 
				{
					for (int i = 0; i < table.getRowCount(); i++) 
					{
						Asistencia asistencia = new Asistencia(clase, alumnos.get(i),(boolean)table.getValueAt(i, 1));
						if((boolean)table.getValueAt(i, 1)==false)
						{
							java.util.Date aux = new java.util.Date();
							Date fecha=new java.sql.Date(aux.getTime());
							Tarea tarea=new Tarea(clase.getFecha(),"inasistencia",clase.getCursada().getUsuario(),
									clase.getCursada().getUsuario(),"Incompleta",alumnos.get(i),"Llamar al alumno",null,null);
							TareaControlador.guardar(tarea);
							tarea.setId(TareaControlador.getUltimoId());
							TareaControlador.setFechaCreacion(tarea, fecha);
						}
						AsistenciaControlador.guardar(asistencia);
					}
				}
				else
				{
					for(int i = 0; i<asistencias.size();i++)
					{
						Asistencia a = asistencias.get(i);
						a.setAsistio((boolean)table.getValueAt(i, 1));
						AsistenciaControlador.actualizar(a);
					}
				}
				padre.nullAsistencias();
				ClaseControlador.cambiarEstado(clase, "Dictada");
				padre.llenarTabla();
				dispose();
			}
		});
		btnReportar.setBounds(192, 385, 89, 23);
		contentPane.add(btnReportar);
	}
	
	public void llenarTabla()
	{
		tm.setRowCount(0);
		Cursada cursada = clase.getCursada();
		asistencias = AsistenciaControlador.getAsistencia(clase);
		alumnos = AlumnoControlador.getAlumno(cursada);
		
		if (asistencias.isEmpty()) 
		{
			for (Alumno a : alumnos) 
			{
				Object[] fila = { a.getNombre() + " " + a.getApellido(), false };
				tm.addRow(fila);
			}
			table.getColumnModel().getColumn(1).setCellEditor(new Celda_CheckBox());
			table.getColumnModel().getColumn(1).setCellRenderer(new Render_CheckBox());
			queHago = false;
		}	
		else
		{
			for (Asistencia a : asistencias) 
			{
				System.out.println(a.isAsistio());
				
				Alumno alumno = a.getAlumno();
				Object[] fila = { alumno.getNombre() + " " + alumno.getApellido(), a.isAsistio()};
				tm.addRow(fila);
			}
			table.getColumnModel().getColumn(1).setCellEditor(new Celda_CheckBox());
			table.getColumnModel().getColumn(1).setCellRenderer(new Render_CheckBox());
			queHago = true;
		}
	}
	
}
